Promise.myAll = function (promises) {
	// count：用于统计个数，res存放每个promise的结果
	let count = 0,
		res = [];
	// 因为需要.then调用，所以返回一个Promise对象
	return new Promise((resolve, reject) => {
		// 遍历每个Promise实例
		promises.forEach((item, index) => {
			//  Promise.resolve(item)用来防止个别不是Promise实例
			Promise.resolve(item)
				.then((val) => {
					// 获取每个实例的数据，加入到res中
					res[index] = val;
					count++;
					// 当count === promises实例个数时，直接resolve(res)
					if (count === promises.length) {
						resolve(res);
					}
				})
				.catch((err) => {
					// 当某个promise实例状态为rejected时，直接执行reject，停止循环，最后也只会输出这个实例结果。
					reject(err);
				});
		});
	});
};

// test
let p1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve(111)
    }, 1000);
})


let p2 = new Promise((resolve, reject) => {
	setTimeout(() => {
		reject(222);
	}, 2000);
});

let p3 = new Promise((resolve, reject) => {
	setTimeout(() => {
		resolve(333);
	}, 3000);
});

Promise.myAll([p1, p2, p3])
	.then((res) => {
		console.log(res);
	})
	.catch((err) => {
		console.log(err);
	});
